﻿using System;
using System.Web.Services;
using Customs.Components.KDT;
using Customs.Components.KDT.Khac;
using Customs.Components.KDT.Khac.Info;
using System.Data;

namespace Customs.WS
{
    public enum MessageFunction
    {
        KhaiBao = 1,
        HuyKhaiBao = 2,
        LayTrangThai = 3,
        LayThongBao = 4,
        LayPhanHoi = 5,
        PhanHoi = 6
    }

    public enum MessageType
    {
        ToKhaiNhap = 1,
        ToKhaiXuat = 2,
        ToKhaiChuyenTiepNhap = 3,
        ToKhaiChuyenTiepXuat = 4,
        DanhMucNguyenPhuLieu = 5,
        DanhMucSanPham = 6,
        HopDong = 7,
        PhuKien = 8,
        DinhMuc = 9,
        DinhMucCungUng = 10,
        ThongTin = 11
    }

    public struct MessageHeader
    {
        public int LoaiChungTu;
        public int LoaiThongDiep;
        public string MaDoanhNghiep;
        public string MaHaiQuan;
        public string MatKhau;
    }

    public class KDTService : WebService
    {
        #region KDT

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Kiểm tra kết nối.
        /// </summary>
        /// <returns>true: Kết nối thành công; false: Kết nối không thành công.</returns>
        [WebMethod(Description = "Kiểm tra kết nối")]
        public bool KDT_CheckConnection()
        {
            return true;
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Đăng nhập vào hệ thống khai điện tử.
        /// </summary>
        /// <param name="MaDoanhNghiep">Mã doanh nghiệp.</param>
        /// <param name="MatKhau">Mật khẩu.</param>
        /// <returns>true: Đăng nhập thành công; false: Đăng nhập không thành công.</returns>
        [WebMethod(Description = "Đăng nhập vào hệ thống khai điện tử")]
        public bool KDT_Login(string MaDoanhNghiep, string MatKhau)
        {
            return DoanhNghiep.Login(MaDoanhNghiep, MatKhau);
        }

        #endregion

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Khai báo tờ khai Hải quan.
        /// </summary>
        /// <param name="TKInfo">Thông tin tờ khai.</param>
        /// <returns>Số tiếp nhận.</returns>
        [WebMethod]
        public long ToKhaiMauDich_Send(ToKhaiMauDichInfo TKInfo)
        {
            TKInfo.NgayTiepNhan = DateTime.Today;            
            ToKhaiMauDich tokhai = new ToKhaiMauDich();
            tokhai.Load(TKInfo);
            return tokhai.InsertFull();
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Hủy thông tin tờ khai đã khai báo.
        /// </summary>
        /// <param name="SoTiepNhan">Số tiếp nhận.</param>
        /// <param name="MaHaiQuan">Mã Hải quan.</param>
        /// <param name="MaDoanhNghiep">Mã doanh nghiệp.</param>
        /// <param name="NamTiepNhan">Năm tiếp nhận.</param>
        /// <returns></returns>
        [WebMethod(Description = "Hủy thông tin tờ khai đã khai báo")]
        public bool ToKhaiMauDich_Cancel(long SoTiepNhan, string MaHaiQuan, string MaDoanhNghiep, int NamTiepNhan)
        {
            return ToKhaiMauDich.HuyThongTinKhaiBao(SoTiepNhan, MaHaiQuan, MaDoanhNghiep, NamTiepNhan) > 0;
        }

        [WebMethod(Description = "Cập nhật thông tin tờ khai mậu dịch")]
        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Đăng nhập vào hệ thống khai điện tử.
        /// </summary>
        /// <param name="MaDoanhNghiep">Mã doanh nghiệp.</param>
        /// <param name="MatKhau">Mật khẩu.</param>
        /// <returns[0] thong tin to khai</returns>
        /// <returns[1] thong tin chung tu cua to khai</returns>
        /// <returns[2] thong tin phan luong to khai</returns>
        /// <returns[3] thong tin cau truc bang to khai</returns>
        /// <returns[4] thong tin cau truc bang chung tu</returns>        
        public string[] ToKhaiMauDich_RequestStatus(long SoTiepNhan, string MaHaiQuan, string MaDoanhNghiep, short NamTiepNhan)
        {
            string[] stXML = new string[5];
            string select = "SELECT * FROM DTOKHAIMD M INNER JOIN DHANGMD D ON M.So_TNDKDT = D.So_TNDKDT AND M.Ma_HQTN = D.Ma_HQTN AND M.Nam_TN = D.Nam_TN";
            string where = string.Format(" WHERE M.So_TNDKDT = {0} AND M.Ma_HQTN = '{1}' AND M.Ma_DV = '{2}' AND M.Nam_TN = {3}", SoTiepNhan, MaHaiQuan.PadRight(6), MaDoanhNghiep, NamTiepNhan);
            string query = select + where;
            DataSet ds= Customs.Components.KDTSelectHelper.SelectDataSetDynamic(query);
            select = "SELECT * FROM DCHUNGTUKEM M ";
            where = string.Format(" WHERE M.So_TNDKDT = {0} AND M.Ma_HQTN = '{1}' AND M.Nam_TN = {2}", SoTiepNhan, MaHaiQuan.PadRight(6),  NamTiepNhan);
            query = select + where;
            DataSet dsChungTu = Customs.Components.KDTSelectHelper.SelectDataSetDynamic(query);
            stXML[0] = ds.GetXml();
            stXML[3] = ds.GetXmlSchema();
            string maLH=ds.Tables[0].Rows[0]["Ma_LH"].ToString();
            int sotk = 0;
            try { sotk = Convert.ToInt32(ds.Tables[0].Rows[0]["So_TK"].ToString()); }
            catch { }
            short namdk = Convert.ToInt16(ds.Tables[0].Rows[0]["NamDK"].ToString());
            if (dsChungTu.Tables[0].Rows.Count == 0)
                stXML[1] = null;
            else
            {
                stXML[1] = dsChungTu.GetXml();
                stXML[4] = dsChungTu.GetXmlSchema();
            }
            if (sotk > 0)
                stXML[2] = Components.SXXK.TOKHAI.ToKhaiMauDich.GetPhanLuongToKhai(MaHaiQuan, maLH, sotk, namdk);
            else
                stXML[2] = null;            
            return stXML;
        }

        /// <summary>
        /// Lay danh sach to khai va hang hoa
        /// </summary>
        /// <param name="maHaiQuan"></param>
        /// <param name="maDoanhNghiep"></param>
        /// <returns>[0]danh sach to khai</returns>
        /// <returns>[1]danh sach hang hoa</returns>
        /// <returns>[2]cau truc bang to khai</returns>
        /// <returns>[3]cau truc bang hang hoa</returns>
        /// <returns>[4]phan luong to khai</returns>
        [WebMethod(Description = "Đồng bộ hoặc lấy thông tin tờ khai mậu dịch về nếu chưa có")]
        public string[] ToKhaiMauDich_Request(string mahq, string maloaihinh, short namdk, int sotk)
        {
            return Components.SXXK.TOKHAI.ToKhaiMauDich.GetToKhai(mahq, maloaihinh, sotk, namdk);
        }
        /// <summary>
        /// Lay danh sach to khai va hang hoa
        /// </summary>
        /// <param name="maHaiQuan"></param>
        /// <param name="maDoanhNghiep"></param>
        /// <returns>[0]danh sach to khai</returns>
        /// <returns>[1]danh sach hang hoa</returns>
        /// <returns>[2]cau truc bang to khai</returns>
        /// <returns>[3]cau truc bang hang hoa</returns>
        /// <returns>[4]phan luong to khai</returns>
        /// <returns>[5]cau truc bang phan luong</returns>
        [WebMethod(Description = "Đồng bộ tất cả hoặc lấy thông tin tờ khai mậu dịch về nếu chưa có")]
        public string[] ToKhaiMauDich_RequestAll(string mahq, string madv,short namdk)
        {
            return Components.SXXK.TOKHAI.ToKhaiMauDich.GetDanhSachToKhai(mahq, madv,namdk);
        }

    }
}